package com.zdw.demo.config.satoken;

import cn.dev33.satoken.stp.StpInterface;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 卓德文
 * @title: 获取角色和权限
 * @date 2022/12/22
 */
@Component
@Slf4j
public class StpInterfaceImpl implements StpInterface {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 使用根据loginId动态查询对应权限
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        //1.查询权限列表
        String permissionStr = stringRedisTemplate.opsForValue().get("user:permission:" + loginId);
        if (StrUtil.isBlank(permissionStr)) {
            log.info("当前用户权限为空");
            return new ArrayList<>();
        }
        List<String> permissionList = JSONObject.parseArray(permissionStr, String.class);

        //2.返回用户权限
        log.info("当前用户:" + loginId + ",权限列表:" + JSONUtil.toJsonStr(permissionList));
        return permissionList;
    }

    /**
     * 使用根据loginId动态查询对应角色
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        //1.查询角色列表
        String roleStr = stringRedisTemplate.opsForValue().get("user:role:" + loginId);
        if (StrUtil.isBlank(roleStr)) {
            log.info("当前用户角色为空");
            return new ArrayList<>();
        }
        List<String> roleList = JSONObject.parseArray(roleStr, String.class);

        //2.返回用户角色
        log.info("当前用户:" + loginId + ",角色列表:" + JSONUtil.toJsonStr(roleList));
        return roleList;
    }

}